home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / csim / source.lha / source / C++SIM / Head.cc < prev    next >
C/C++ Source or Header  |  1993-06-14  |  1KB  |  108 lines

  1. /*
  2.  * Copyright (C) 1993
  3.  *
  4.  * Department of Computing Science,
  5.  * The University,
  6.  * Newcastle upon Tyne,
  7.  * UK.
  8.  */
  9.  
  10.  
  11. /*
  12.  * This class essentially defines the linked list manager used by the SIMSET
  13.  * class in SIMULA.
  14.  */
  15.  
  16.  
  17. #ifndef HEAD_H_
  18. #include "Head.h"
  19. #endif
  20.  
  21. #ifndef LINK_H_
  22. #include "Link.h"
  23. #endif
  24.  
  25. #include <iostream.h>
  26.  
  27.  
  28. Head::Head ()
  29.             : first(0),
  30.           last(0)
  31. {
  32. }
  33.  
  34. Head::~Head () { Clear(); }
  35.  
  36. void Head::AddFirst (Link* element)
  37. {
  38.     if (!element)
  39.     return;
  40.     
  41.     if (!first)
  42.     {
  43.     if (element->inList)
  44.         element->Out();
  45.     
  46.     first = element;
  47.     last = element;
  48.     element->inList = true;
  49.     }
  50.     else
  51.     {
  52.     first->Precede(element);
  53.     first = first->Pred();
  54.     }
  55. }
  56.  
  57. void Head::AddLast (Link* element)
  58. {
  59.     if (last)
  60.     {
  61.     element->Follow(last);
  62.     last = element;
  63.     }
  64.     else
  65.     {
  66.     if (element->inList)
  67.         element->Out();
  68.     
  69.     element->inList = true;
  70.     first = element;
  71.     last = element;
  72.     }
  73. }
  74.  
  75. long Head::Cardinal () const 
  76. {
  77.     long numberOfElements = 0;
  78.     Link *tempPtr = first;
  79.     
  80.     while (tempPtr)
  81.     {
  82.     numberOfElements++;
  83.     tempPtr = tempPtr->Suc();
  84.     }
  85.     
  86.     return numberOfElements;
  87. }
  88.  
  89. void Head::Clear ()
  90. {
  91.     Link *tempPtr = first, *marker = 0;
  92.     
  93.     while (!tempPtr)
  94.     {
  95.     marker = tempPtr;
  96.     tempPtr = tempPtr->Suc();
  97.     delete marker;
  98.     }
  99. }
  100.  
  101.  
  102. #ifdef NO_INLINES
  103. #  define HEAD_CC_
  104. #  include "Head.n"
  105. #  undef HEAD_CC_
  106. #endif
  107.  
  108.